package cn.always.xiajia.admin.oauth2.client.impl;

import javax.annotation.Resource;
import javax.validation.Valid;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import cn.always.xiajia.admin.client.api.oauth2.OAuth2AccessTokenClient;
import cn.always.xiajia.admin.client.api.oauth2.dto.OAuth2AccessTokenCheckRespDTO;
import cn.always.xiajia.admin.client.api.oauth2.dto.OAuth2AccessTokenCreateReqDTO;
import cn.always.xiajia.admin.client.api.oauth2.dto.OAuth2AccessTokenRespDTO;
import cn.always.xiajia.admin.oauth2.service.OAuth2AccessTokenService;
import cn.always.xiajia.framework.mybatis.core.controller.BaseControllerX;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.extern.slf4j.Slf4j;

/**
 * 
 * @author xgj
 *
 */
@RestController
@RequestMapping("/${xj.service.admin.version}/${xj.rpc.rpcurlprefix}/admin/oauth2/oauth2accesstoken")
@Slf4j
public class OAuth2AccessTokenClientImpl extends BaseControllerX implements OAuth2AccessTokenClient {

	@Resource
	private OAuth2AccessTokenService oAuth2AccessTokenService;

	/**
	 * 创建访问令牌
	 *
	 * @param reqDTO 访问令牌的创建信息
	 * @return 访问令牌的信息
	 */
	@Schema(description = "创建访问令牌")
	@PostMapping("/createaccesstoken")
	@Override
	public OAuth2AccessTokenRespDTO createAccessToken(@RequestBody @Valid OAuth2AccessTokenCreateReqDTO reqDTO) {
		return oAuth2AccessTokenService.createAccessToken(reqDTO);
	}

	/**
	 * 校验访问令牌
	 *
	 * @param accessToken 访问令牌
	 * @return 访问令牌的信息
	 */
	@Schema(description = "校验访问令牌")
	@PostMapping("/checkaccesstoken")
	@Override
	public OAuth2AccessTokenCheckRespDTO checkAccessToken(@RequestParam(value = "accessToken") String accessToken) {
		return oAuth2AccessTokenService.checkAccessToken(accessToken);
	}

	/**
	 * 移除访问令牌
	 *
	 * @param accessToken 访问令牌
	 * @return 访问令牌的信息
	 */
	@Schema(description = "移除访问令牌")
	@PostMapping("/removeaccesstoken")
	@Override
	public OAuth2AccessTokenRespDTO removeAccessToken(@RequestParam(value = "accessToken") String accessToken) {
		return oAuth2AccessTokenService.removeAccessToken(accessToken);
	}

	/**
	 * 刷新访问令牌
	 *
	 * @param refreshToken 刷新令牌
	 * @param clientId 客户端编号
	 * @return 访问令牌的信息
	 */
	@Schema(description = "刷新访问令牌")
	@PostMapping("/refreshaccesstoken")
	@Override
	public OAuth2AccessTokenRespDTO refreshAccessToken(@RequestParam(value = "refreshToken") String refreshToken,
			@RequestParam(value = "clientId") String clientId) {
		return oAuth2AccessTokenService.refreshAccessToken(refreshToken, clientId);
	}
}
